package com.igd.utils;

import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

 /**
 * @version  1.0
 *
 * @author   QIAOYU
 *
 * @date     2013-6-18
 *
 * @description	 JSON公共工具类
 */

public class JsonUtil {
	
	/**
	 * 此方法提供返回标准的JSON字符串,标准的JSON是使用双引号的
	 * 
	 * @param o
	 * 
	 * @return
	 */
	public static String toStandardJsonString(Object o){
		
		if(null != o){
			
			return JSON.toJSONString(o);

		}
		
		return null;
	}
	
	/**
	 * 此方法提供返回JavaScript的JSON字符串,JavaScript支持使用单引号格式的json文本
	 * 
	 * @param o
	 * 
	 * @return
	 */
	public static String toJavaScriptJsonString(Object o){
		
		if(null != o){
			
			return toJsonString(o,SerializerFeature.UseSingleQuotes);

		}
		
		return null;
	}
	
	/**
	 * 此方法提供返回带有类型的JSON字符串,例如{"@type":"java.awt.Color","r":255,"g":0,"b":0,"alpha":255}
	 * 
	 * @param o
	 * 
	 * @return
	 */
	public static String toJsonStringWithClassName(Object o){
		
		if(null != o){
			
			return toJsonString(o,SerializerFeature.WriteClassName);

		}
		
		return null;
	}
	
	/**
	 * 此方法提供返回指定格式的JSON字符串
	 * 
	 * @param o
	 * 
	 * @param arg1
	 * 
	 * @return
	 */
	public static String toJsonString(Object o, SerializerFeature... arg1){
		
		if(null != o){
			
			return JSON.toJSONString(o,arg1);

		}
		
		return null;
	}
	
	/**
	 * 指定Class信息反序列化为Java对象
	 * 
	 * @param jsonStr
	 * 
	 * @param clz
	 * 
	 * @return
	 */
	public static <T> T parseObject(String jsonStr,Class<T> clz){
		
		if(StringUtils.isNotEmpty(jsonStr) && null != clz){
			
			return JSON.parseObject(jsonStr, clz);

		}
		
		return null;
	}
	
	/**
	 * 指定Class信息反序列化为集合
	 * 
	 * @param jsonArrayStr
	 * 
	 * @param clz
	 * 
	 * @return
	 */
	public static <T>List<T> pasrseArray(String jsonArrayStr,Class<T> clz){
		
		if(StringUtils.isNotEmpty(jsonArrayStr) && null != clz){
			
			return JSON.parseArray(jsonArrayStr, clz);

		}
		
		return null;
	}
}
